package org.example.campusforum.service;

import com.baomidou.mybatisplus.extension.service.IService;
import org.example.campusforum.entity.User;
import org.example.campusforum.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.example.campusforum.vo.UserInfo;

/**
 * 用户服务接口
 *
 * 提供用户相关的业务逻辑处理，包括用户信息查询、更新、密码管理和用户注册等功能。
 * 继承MyBatis Plus的IService接口，提供基础的CRUD操作。
 *
 * @author CampusForum Team
 * @version 1.0
 * @since 2024
 */
public interface UserService extends IService<User> {

    /**
     * 获取用户信息
     *
     * 根据用户ID查询用户的基本信息，包括昵称、头像、性别、年龄和个性签名。
     *
     * @param userId 用户ID
     * @return 用户信息VO对象，如果用户不存在则返回null
     */
    UserInfo getUserInfo(Long userId);

    /**
     * 更新用户信息
     *
     * 根据用户ID更新用户的基本信息，只更新非空字段。
     * 自动设置更新时间为当前时间。
     *
     * @param userId 用户ID
     * @param userUpdate 用户更新信息，包含要更新的字段
     * @return 是否更新成功
     */
    boolean updateUserInfo(Long userId, User userUpdate);

    /**
     * 修改密码
     *
     * 验证用户的原密码后更新为新密码。
     * 需要提供正确的原密码才能修改成功。
     *
     * @param currentUsername 当前用户邮箱
     * @param oldPassword 原密码
     * @param newPassword 新密码
     * @return 是否修改成功
     */
    boolean changePassword(String currentUsername, String oldPassword, String newPassword);

    /**
     * 重置密码（忘记密码）
     *
     * 通过邮箱验证后直接重置用户密码，无需验证原密码。
     * 通常用于忘记密码的场景。
     *
     * @param email 用户邮箱
     * @param newPassword 新密码
     * @return 是否重置成功
     */
    boolean resetForgottenPassword(String email, String newPassword);

    /**
     * 用户注册
     *
     * 创建新用户账户，将用户信息保存到数据库。
     *
     * @param user 用户信息
     * @return 是否注册成功
     */
    boolean registerUser(User user);
}